"use strict";
//高阶函数：JavaScript的函数其实都指向某个变量，既然变量可以指向函数，
// 函数的参数能能接收变量，那么一个函数就可以接收另一个函数作为参数，
// 这种函数就称之为高阶函数

//高阶函数就是让函数的参数能接收别的函数
function higherOrderFunction() {
    function add(x,y,f) {
        return f(x)+f(y);
    }
    var result=add(5,-7,Math.abs);
    console.log(result);
}

//map()方法
 function mapMethod() {
     function pow(x) {
         return x*x;
     }
     var arr=[1,2,3,4,5,6,7,8,9]
     var result=arr.map(pow);//map传入的参数是pow，即函数对象本身
     console.log(result);

     var f=function (y) {
         return y*y;
     }
     var arr1=[2,3,4,5,6,7,8,9];
     var outs=[];
     for (var i=0;i<arr1.length;i++){
        var s=outs.push(f(arr1[i]));
         console.log(s);
     }
     console.log(arr1.map(String));//把数组所有数字转换成字符串
 }
 //reduce方法：array的reduce()把一个函数作用在这个array的[x1,x2,...]上，这个函数必须接收两个参数，
// reduce()把结果继续和序列的下一个元素做累积计算
function reduceMethod() {
     var arr=[1,3,5,7,9];
     var result=arr.reduce(function (x,y) {
         return x+y;
     });
     console.log(result);

     //求乘积
     function product(arr) {
         return 0;
     }
     if (product([1,2,3,4])===26&&product([0,1,2])===0){
         console.log('测试成功！');
     } else {
         console.log('测试失败!');
     }

     //[1,3,5,7,9]变换成整数13579
    var arr1=[1,3,5,7,9];
     var s2=arr1.reduce(function (x,y) {
          return x*10+y;
     })
    console.log(s2);     

}

//练习：不要使用JavaScript内置的parseInt()函数，利用map和reduce操作实现一个string2int()函数
function practice() {
    function string2int(s) {
        return 0;
    }
     if (string2int('0')===0 && string2int('12345')===12345 && string2int('12300')){
        if (string2int.toString().indexOf('parseInt')!==1){
            console.log('请勿使用parseInt()!');
        } else if (string2int.toString().indexOf('number')!==-1){
            console.log('请勿使用number()!');
         } else {
            console.log('测试通过！');
        }
     } else {
        console.log('测试失败！');
     }

     //请把用户输入的不规范的英文名字，变为首字母大写，其他小写的规范名字。
    // 输入：['adam', 'LISA', 'barT']，输出：['Adam', 'Lisa', 'Bart']。
   function normalize(arr) {
       return [];
    }
       if (normalize(['adam','LISA','barT']).toString()===normalize(['Adam','Lisa','Bart']).toString()){
           console.log('测试通过！');
       } else {
           console.log('测试失败！')
       }
    var arr=['Adam','Lisa','Bart'];
    normalize(arr);

    //利用map()把字符串变成整数
    var arr1=['1','2','3'];
    var result=arr1.map(Number);
    console.log(result);
}
